package org.practice.dao;

import javax.annotation.Resource;

import org.hibernate.SessionFactory;
import org.practice.model.LogInfo;
import org.springframework.orm.hibernate3.HibernateTemplate;
import org.springframework.stereotype.Component;
@Component(value="logDao")
public class LogInfoDaoImpl extends HibernateTemplate implements LogInfoDao{
	private SessionFactory sessionFactory;
	public SessionFactory getSessionFactory() {
		return sessionFactory;
	}
	@Resource
	public void setSessionFactory(SessionFactory sessionFactory) {
		this.sessionFactory = sessionFactory;
	}
	public void addLogInfo(LogInfo logInfo) {
		/*
		 * sessionFactory.getCurrentSession(),从Spring IOC容器中获得当前线程所绑定的一个事务控制的Session,如果该session没有事务，则报错如下所述。
		 * No Hibernate Session bound to thread, and configuration does not allow creation of non-transactional one here
		 * 使不使用模板都是一样的，都没有事务，事务的实现依赖AOP，但模板会自动获得带事务的session（sessionFactory.getCurrentSession），并且方法结束后关闭session
		 */
		//加入事务控制,则自己不用写try..catch..finally，Spring会自动加入事务控制的切面(自动加入try..catch块)
		this.save(logInfo);
		
		////////////////下面是标准的手动事务管理代码///////////////////////
//		Session s=sessionFactory.openSession();
//		try {
//			s.beginTransaction();
//			s.save(logInfo);
//			s.getTransaction().commit();
//		} catch (HibernateException e) {
//			s.getTransaction().rollback();
//			e.printStackTrace();
//		} finally{
//			s.close();
//		}
	}

}